home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / go32 / fs / xsupport.c < prev    next >
C/C++ Source or Header  |  1995-03-23  |  7KB  |  226 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <pc.h>
  6. #include <dos.h>
  7. #include <dpmi.h>
  8. #include <go32.h>
  9. #include <keys.h>
  10. #define far
  11. #include "ed.h"
  12. #include "syms.h"
  13. #include "paging.h"
  14. #include "fsfuncts.h"
  15. #include "xsupport.h"
  16. #include "io.h"
  17.  
  18. int dummy_object_support (word32 addr);
  19. void dummy_object_redraw (char *buf);
  20.  
  21. /* ---------------------------------------------------------------------- */
  22. static word32
  23. get_sym(char *prompt)
  24. {
  25.   screen_attr = screen_attr_message;
  26.   if (my_read_string(prompt))
  27.     return 0;
  28.   screen_attr = screen_attr_normal;
  29.   return syms_name2val (read_buffer);
  30. }
  31. /* ---------------------------------------------------------------------- */
  32. static int
  33. get_num(char *prompt)
  34. {
  35.   char *endp;
  36.  
  37.   screen_attr = screen_attr_message;
  38.   if (my_read_string(prompt))
  39.     return 0;
  40.   screen_attr = screen_attr_normal;
  41.   return strtoul (read_buffer, &endp, 0);
  42. }
  43. /* ---------------------------------------------------------------------- */
  44. static word32
  45. get_addr (word32 addr)
  46. {
  47.   word32 return_addr;
  48.  
  49.   return_addr = get_sym("Address (Enter = Current): ");
  50.   if (!valid_addr (return_addr, sizeof (word32)))
  51.     return_addr = addr;
  52.   return return_addr;
  53. }
  54. /* ---------------------------------------------------------------------- */
  55. int
  56. extern_data_support(word32 addr)
  57. { return (dummy_object_support (addr));
  58. }
  59. /* ---------------------------------------------------------------------- */
  60. void
  61. redraw_xsupport (char *buf)
  62. { dummy_object_redraw (buf);
  63. }
  64.  
  65. /* ---------------------------------------------------------------------- */
  66.  
  67. /* **********************************************************************
  68.    *                                                                    *
  69.    *       Example for using the xsupport module.                       *
  70.    *                                                                    *
  71.    ********************************************************************** */
  72.  
  73. static MENU_ITEM dummy_Object_Sub_Menu[] = {
  74.        {"Current item            ", 1        , "" , 0},
  75.        {"Display by ind~E~x      ", ITEM_TYPE, "e", 0},
  76.        {"Display by ~A~ddress    ", ITEM_TYPE, "a", 0},
  77.        {"Display ~H~idden objects", ITEM_TYPE, "h", 0},
  78.        {"Display ~O~bject set    ", ITEM_TYPE, "o", 0},
  79.        {"Display top ~I~nstances ", ITEM_TYPE, "i", 0},
  80.        {0                         , 0        , "" , 0}
  81. };
  82. static MENU_ITEM dummy_Frame_Sub_Menu[] = {
  83.        {"Current item        ", 1        , "" , 0},
  84.        {"Display by ~A~ddress", ITEM_TYPE, "a", 0},
  85.        {"Display ~B~uffer    ", ITEM_TYPE, "b", 0},
  86.        {0                     , 0        , "" , 0}
  87. };
  88. static MENU_ITEM dummy_Queue_Sub_Menu[] = {
  89.        {"Current item              ", 1        , "" , 0},
  90.        {"~D~isplay Queue Descriptor", ITEM_TYPE, "d", 0},
  91.        {0                           , 0        , "" , 0}
  92. };
  93. static MENU_ITEM dummy_Main_Menu[] = {
  94.        {"Current  "       , 1        , "" , 0                    },
  95.        {"~O~bjects "      , MENU_TYPE, "o", dummy_Object_Sub_Menu},
  96.        {"~F~rames "       , MENU_TYPE, "f", dummy_Frame_Sub_Menu },
  97.        {"~Q~ueues "       , MENU_TYPE, "q", dummy_Queue_Sub_Menu },
  98.        {"~L~og    "       , ITEM_TYPE, "l", 0                    },
  99.        {"~H~elp   "       , ITEM_TYPE, "h", 0                    },
  100.        {"~E~xit XSupport ", ITEM_TYPE, "e", 0                    },
  101.        {0                 , 0        , "" , 0                    }
  102. };
  103.  
  104. static WIN_TEXT my_win_text;
  105. static int initialized = 0;
  106.  
  107. /* ---------------------------------------------------------------------- */
  108. static void
  109. dummy_disp_help ()
  110. {
  111.   init_text (&my_win_text, "Help");
  112.   init_text (&my_win_text, "Help");
  113.   add_text  (&my_win_text, "Use the <Log> entry in the menu to log the output pane.");
  114.   add_text  (&my_win_text, "Use C-x C-w at any window to log the focused window.");
  115.   add_text  (&my_win_text, "    C-x C-f to view the log file.");
  116.   add_text  (&my_win_text, " ");
  117.   add_text  (&my_win_text, "All global and local keystrokes are still in effect.");
  118.   add_text  (&my_win_text, "Use Esc C-p <Pane> to select a pane.");
  119.   add_text  (&my_win_text, "To return to the original menu, use <Exit XSupport>");
  120.   text_win  (my_win_text, 60, 20);
  121.   free_text (&my_win_text);
  122. }
  123. /* ---------------------------------------------------------------------- */
  124. static void
  125. init_internal_data_struct ()
  126. { initialized = 1;
  127. }
  128. /* ---------------------------------------------------------------------- */
  129. int
  130. dummy_object_support(word32 addr)
  131. {
  132.   unsigned int index, num;
  133.   word32       new_addr;
  134.   int           BarSelect, PopSelect;
  135.  
  136.   if (!initialized)       /* Should be checked in a real xsupport routine */
  137.     init_internal_data_struct ();
  138.   if (!initialized)       /* Program has not been run ?                   */
  139.   { message (CL_Error, "Program has not initialized its data.");
  140.     return (1);
  141.   }
  142.   dummy_object_redraw (read_buffer);
  143.   menu (dummy_Main_Menu, &BarSelect, &PopSelect);
  144.   switch (BarSelect)
  145.   { case 1:
  146.       switch (PopSelect)
  147.       { case 1: 
  148.       index = get_num ("Enter an index: ");
  149.           break;
  150.         case 2:
  151.           new_addr  = get_addr (addr);
  152.           break;
  153.         case 3:
  154.           new_addr  = get_addr (addr);
  155.           break;
  156.         case 4:
  157.           new_addr  = get_addr (addr);
  158.           break;
  159.         case 5:
  160.           num = get_num ("Instances: ");
  161.           break;
  162.       }
  163.       break;
  164.     case 2:
  165.       switch (PopSelect)
  166.       {
  167.         case 1:
  168.           new_addr  = get_addr (addr);
  169.           break;
  170.         case 2:
  171.           num = get_num ("Buffer number: ");
  172.           break;
  173.       }
  174.       break;
  175.     case 3:
  176.       switch (PopSelect)
  177.       {
  178.         case 1:
  179.           new_addr  = get_addr (addr);
  180.           break;
  181.       }
  182.       break;
  183.     case 4:
  184.       if (cols > 31 && rows > 12)
  185.         read_write_log (cols - 31, rows - 31 > 2 ? rows - 31 : 2,
  186.                        cols - 1, rows - 1);
  187.       break;
  188.     case 5:
  189.       dummy_disp_help ();
  190.       break;
  191.     case 6:
  192.       return (1);
  193.   }
  194.   return (0);
  195. }
  196. /* ---------------------------------------------------------------------- */
  197. void
  198. dummy_object_redraw (char *buf)
  199. { int width = 30;
  200.   int x2 = cols - 1, x1 = x2 - width - 1;
  201.   int y2 = rows - 2, y1 = y2 - 12;
  202.  
  203.   if (x1 < 0 || y1 < 0)     /* Screen is too small */
  204.     return;
  205.  
  206.   screen_attr = screen_attr_ffocus;
  207.   double_frame (x1, y1, x2, y2, "XSupport");
  208.   screen_attr = screen_attr_help;
  209.  
  210.   sprintf (read_buffer, "Testing Object System Info");
  211.   putl (x1 + 1, y1 + 1, width, read_buffer);
  212.   sprintf (read_buffer, "--------------------------");
  213.   putl (x1 + 1, y1 + 2, width, read_buffer);
  214.  
  215.   screen_attr = screen_attr_normal;
  216.   sprintf (read_buffer, "dummy_object_support ()");
  217.   putl (x1 + 1, y1 + 3, width, read_buffer);
  218.   sprintf (read_buffer, " doesn't know what these ");
  219.   putl (x1 + 1, y1 + 4, width, read_buffer);
  220.   sprintf (read_buffer, " data means");
  221.   putl (x1 + 1, y1 + 5, width, read_buffer);
  222.  
  223.   show_menu_bar (dummy_Main_Menu);
  224. }
  225. /* ---------------------------------------------------------------------- */
  226.